package com.helen.utils;

import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
import android.graphics.Color;
import android.graphics.Point;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
import android.os.Build;
import android.text.TextUtils;
import android.util.DisplayMetrics;
import android.view.Window;
import android.view.WindowManager;
import android.widget.Toast;

import com.helen.ui.login.LoginActivity;
import com.helen.utils.tiputils.MToast;
import com.helen.utils.tiputils.MToastConfig;

/**
 * Created by wangyang on 2016/5/23.
 * 手机工具类
 */
public class PhoneUtils {

    /**
     * 没有网络
     */
    public static final int NETWORKTYPE_INVALID = 0;
    /**
     * wap网络
     */
    public static final int NETWORKTYPE_WAP = 1;
    /**
     * 2G网络
     */
    public static final int NETWORKTYPE_2G = 2;
    /**
     * 3G和3G以上网络，或统称为快速网络
     */
    public static final int NETWORKTYPE_3G = 3;
    /**
     * wifi网络
     */
    public static final int NETWORKTYPE_WIFI = 4;

    public static int mNetWorkType = 1;

    public static long timeDifference = 0;

    /**
     * 判断手机联网状态
     *
     * @param context
     * @return
     */
    public static boolean checkNetwork(Context context) {
        if (isNetworkConnected(context) == true) {
            //Toast.makeText(context, "当前网络不可用，请设置", Toast.LENGTH_SHORT).show();
            return isWifiConnected(context) == true || isMobileConnected(context) == true;
        } else {
            //Toast.makeText(context, "当前网络不可用，请设置", Toast.LENGTH_SHORT).show();
            return false;
        }
    }

    /**
     * 判断是否有链接的网络
     *
     * @param context
     * @return
     */
    public static boolean isNetworkConnected(Context context) {
        if (context != null) {
            ConnectivityManager mConnectivityManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
            NetworkInfo networkInfo = mConnectivityManager.getActiveNetworkInfo();
            if (networkInfo != null) {
                return networkInfo.isAvailable();
            } else {
                Toast.makeText(context, "网络连接错误!", Toast.LENGTH_LONG).show();
            }
        }
        return false;
    }

    /**
     * 描述 判断wifi是否可用
     *
     * @param context
     * @return
     */
    public static boolean isWifiConnected(Context context) {
        if (context != null) {
            ConnectivityManager mConnectivityManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
            NetworkInfo info = mConnectivityManager.getNetworkInfo(ConnectivityManager.TYPE_WIFI);
            if (info != null) {
                return info.isAvailable();
            }
        }
        return false;
    }

    /**
     * 描述 判断移动网络是否可用
     *
     * @param context
     * @return
     */
    public static boolean isMobileConnected(Context context) {
        if (context != null) {
            ConnectivityManager mConnectivityManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
            NetworkInfo info = mConnectivityManager.getNetworkInfo(ConnectivityManager.TYPE_MOBILE);
            if (info != null) {
                return info.isAvailable();
            }
        }
        return false;
    }

    /**
     * 获取手机屏幕得宽度
     *
     * @param context
     * @return
     */
    public static int getPhoneWidth(Context context) {
        Activity activity = (Activity) context;
        DisplayMetrics displayMetrics = new DisplayMetrics();
        activity.getWindow().getWindowManager().getDefaultDisplay().getMetrics(displayMetrics);
        return displayMetrics.widthPixels;
    }

    /**
     * 获取手机屏幕得高度
     *
     * @param context
     * @return
     */
    public static int getPhoneHeight(Context context) {
        Activity activity = (Activity) context;
        DisplayMetrics displayMetrics = new DisplayMetrics();
        activity.getWindow().getWindowManager().getDefaultDisplay().getMetrics(displayMetrics);
        return displayMetrics.heightPixels;
    }

    public static Point getDeviceSize(Context context) {
        WindowManager manager = (WindowManager) context
                .getSystemService(Context.WINDOW_SERVICE);
        Point point = new Point();
        if (Build.VERSION.SDK_INT < Build.VERSION_CODES.HONEYCOMB_MR2) {
            point.x = manager.getDefaultDisplay().getWidth();
            point.y = manager.getDefaultDisplay().getHeight();
        } else {
            manager.getDefaultDisplay().getSize(point);
        }
        return point;
    }

    /**
     * 获取状态栏高度＋标题栏高度
     *
     * @param activity
     * @return
     */
    public static int getTopBarHeight(Activity activity) {
        return activity.getWindow().findViewById(Window.ID_ANDROID_CONTENT).getTop();
    }


    /**
     * 验证手机格式
     */
    public static boolean isMobileNO(String mobiles) {
            /*
             * 移动：134、135、136、137、138、139、150、151、157(TD)、158、159、187、188
             * 联通：130、131、132、152、155、156、185、186 电信：133、153、180、189、（1349卫通）
             * 总结起来就是第一位必定为1，第二位必定为3或5或8，其他位置的可以为0-9
             */
        // String telRegex = "[1][34758]\\d{9}";// "[1]"代表第1位为数字1，"[358]"代表第二位可以为3、5、8中的一个，"\\d{9}"代表后面是可以是0～9的数字，有9位。
        String telRegex = "^((13[0-9])|(14[0-9])|(16[0-9])|(19[0-9])|(15[^4,\\D])|(1(7|8)[^n,\\D]))\\d{8}";// "[1]"代表第1位为数字1，"[358]"代表第二位可以为3、5、8中的一个，"\\d{9}"代表后面是可以是0～9的数字，有9位。
        if (TextUtils.isEmpty(mobiles))
            return false;
        else
            return mobiles.matches(telRegex);
    }


    /**
     */
    public static int dip2px(Context context, float dpValue) {
        final float scale = context.getResources().getDisplayMetrics().density;
        return (int) (dpValue * scale + 0.5f);
    }

    /**
     */
    public static int px2dip(Context context, float pxValue) {
        final float scale = context.getResources().getDisplayMetrics().density;
        return (int) (pxValue / scale + 0.5f);
    }

    /**
     * 将px值转换为sp值，保证文字大小不变
     *
     * @param pxValue
     * @param （DisplayMetrics类中属性scaledDensity）
     * @return
     */
    public static int px2sp(Context context, float pxValue) {
        final float fontScale = context.getResources().getDisplayMetrics().scaledDensity;
        return (int) (pxValue / fontScale + 0.5f);
    }

    /**
     * 将sp值转换为px值，保证文字大小不变
     *
     * @param spValue
     * @return
     */
    public static int sp2px(Context context, float spValue) {
        final float fontScale = context.getResources().getDisplayMetrics().scaledDensity;
        return (int) (spValue * fontScale + 0.5f);
    }

    /**
     * 获取app版本号码
     *
     * @param context
     * @return
     */
    public static String getVersion(Context context)//获取版本号
    {
        try {
            PackageInfo pi = context.getPackageManager().getPackageInfo(context.getPackageName(), 0);
            return pi.versionName;
        } catch (PackageManager.NameNotFoundException e) {
            return 0 + "";
        }
    }

    public static int getVersionCode(Context context)//获取版本号(内部识别号)
    {
        try {
            PackageInfo pi = context.getPackageManager().getPackageInfo(context.getPackageName(), 0);
            return pi.versionCode;
        } catch (PackageManager.NameNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
            return 0;
        }
    }


    //Pop背景设置
    public static void backgroundAlpha(Activity activity, float bgAlpha) {
        WindowManager.LayoutParams lp = activity.getWindow().getAttributes();
        lp.alpha = bgAlpha;
        activity.getWindow().addFlags(WindowManager.LayoutParams.FLAG_DIM_BEHIND);
        activity.getWindow().setAttributes(lp);
    }


    public static String checkResponseFlag(Context activity, String result, String tag) {
        MyLog.i("yang", tag + "====" + result);
        int code = JsonUtil.getJsonValuesInt(result, "code");
        String msg = JsonUtil.getJsonValuesString(result, "msg");
        if (code == 0) {
            if (TextUtils.isEmpty(JsonUtil.getJsonValuesString(result, "user"))) {
                MyLog.i("yang", "99999");
                return "yang";
            } else {
                return JsonUtil.getJsonValuesString(result, "user");
            }

        } else {
            MToast.makeTextShort(activity, msg).show();
            return null;
        }
    }

    public static String checkResponseFlag2(Context activity, String result, String tag) {
        MyLog.i("yang", tag + "====" + result);
        int code = JsonUtil.getJsonValuesInt(result, "code");
        String msg = JsonUtil.getJsonValuesString(result, "msg");
        if (code == 0) {
            return JsonUtil.getJsonValuesString(result, "list");
        } else {
            MToast.makeTextShort(activity, msg).show();
            return null;
        }
    }
}
